home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / doc.lha / documentation / manual / intro.mss < prev    next >
Text File  |  1987-06-30  |  9KB  |  210 lines

  1. @part[INTRO, Root "TMAN.MSS"]    @comment{ -*-System:TMAN-*-}
  2. @set[Page=+1]@string[ContentsPage=Page]@set[Page='0']
  3. @chap[Introduction]
  4. @label[First T Chapter]    @Comment{ref: Implementation Chapter}
  5.  
  6.  
  7. @section[Language overview]
  8.  
  9. @tau[] is a dialect of Lisp derived from SCHEME. @cite[STEELE78REV]
  10. It is comparable in power and expressiveness to
  11. other recent Lisp dialects such as Lisp Machine Lisp, @cite[WEINREB81] Common
  12. Lisp, @cite[STEELE83COM] and NIL, @cite[WHITE79] but fundamentally more
  13. similar in spirit to SCHEME than these other Lisp dialects.
  14.  
  15. @Tau[] endeavors to be a powerful, expressive language which also
  16. permits portable and efficient implementations.  @tau[] is a @qu"modern"
  17. Lisp suitable for a broad variety of applications, including symbolic,
  18. numerical, and systems programming, on a variety of machines.
  19.  
  20. @tau[] draws from many sources in its attempt to provide a complete yet
  21. simple and unified system.  For the most part, the language's designers
  22. are collators, not originators.  Common Lisp, NIL, and SCHEME have been
  23. the strongest influences.
  24.  
  25. Except for a restriction on the use of escape procedures (see the
  26. description of @tc[CATCH], page @PageRef[CATCH]),
  27. the omission of @tc[TEST] and the multiprocessing primitives,
  28. and a few changed names (e.g., @tc[SET] instead of @tc[ASET']),
  29. @tau[] includes as a subset the SCHEME dialect described in
  30. @i[The Revised Report on SCHEME]@cite[STEELE78REV].
  31.  
  32. @citemark[GABRIEL82]
  33. @citemark[HOLLOWAY80]
  34. @citemark[STEELE76IMP]
  35. @citemark[STEELE76DEC]
  36. @citemark[STEELE78RAB]
  37. @citemark[STEELE79]
  38. @citemark[STEELE80]
  39. @citemark[SUSSMAN75]
  40. @citemark[CHARNIAK80]
  41.  
  42. @dc{ don't appeal to other Lisps as much. }
  43.  
  44. @dc{ Talk about how technical terms are introduced. }
  45.  
  46. @section[Notational conventions]
  47.  
  48. @dc{
  49. Talk about the standard definition format - what the arrows
  50. and all that mean, etc.  Give examples.  Talk about @qu"body" and "undefined".
  51.  
  52. Flushed all the @b[boldface] commands, turned them into italics.
  53. }
  54.  
  55. The symbol @qu"@ev[]" @index[@ev[]] is used to indicate @i[evaluation].
  56. (Evaluation is described in section @ref[core language section].)
  57. For example, @wt[(+ 3 5) @ev[] 8] means that evaluating the expression
  58. @wt[(+ 3 5)] yields @tc[8].
  59.  
  60. The symbol @qu"@ce[]" @index[@ce[]] indicates @i[code equivalence].  For
  61. example,
  62. @teg[(CAR (CDR @i[x])) @ce[] (CADR @i[x])]
  63. means that for any
  64. @i[x], the value and effects of @wt[(CAR (CDR @i[x]))] are always the
  65. same as the value and effects of @wt[(CADR @i[x])].
  66.  
  67. The symbol @qu"@yl[]" @index(@yl[]) is used in definitions to indicate
  68. the @i[type of result].  For example,
  69.   @teg[(NUMBER? @i[object]) @yl[] @i[boolean]]
  70. means that the procedure named @tc[NUMBER?] yields a boolean result.
  71.   @begin[ProgramExample]
  72. (PRINT @i[object stream]) @yl[] @i[undefined]
  73.   @end[ProgramExample]
  74. @index[undefined] means that @tc[PRINT]
  75. returns a value of no particular interest; that is, one should
  76. not depend on it to return anything in particular.
  77.  
  78. @i[Italicized] names in the code examples are meta-variables that stand
  79. for pieces of code to be filled in.  Restrictions on the particular
  80. types or values of a meta-variable are often suggested by its name or
  81. are given in the text associated with the example.  The term @i[object]
  82. denotes data of unrestricted type.
  83.  
  84. @ix[Dot-notation], as in @wt[(ADD . @i[numbers])], is used where any
  85. number of sub-forms are permitted.  In this example, there may be zero
  86. or more @i[numbers]; the description subsumes cases such as @wt[(ADD)],
  87. @wt[(ADD 3)], and @wt[(ADD 3 5 2)].
  88.  
  89. Some routines described in this manual, such as @tc[VREF]
  90. (page @pageref[VREF]), serve as @iix[access routines] in
  91. the sense that they are appropriate for use in @tc[SET] and related
  92. forms to designate locations.  These routines have their descriptions
  93. flagged with the notation @iix[Settable].
  94.  
  95. @dc{ Talk about other notations: @i[Type predicate, Operation,] etc. }
  96.  
  97.  
  98. @section[Naming conventions]
  99.  
  100. @dc{ Talk about long names, abbreviation phobia, etc.
  101.  
  102. @i[Abbreviations.]  Abbreviations are avoided
  103. in names of @Tau[] entities.  Words are spelled out and separated by
  104. hyphens, e.g. @tc[DEFINE-OPERATION], @tc[STRING-LENGTH].
  105. Where abbreviations are used, they are used consistently:
  106. e.g. @tc[CHAR] abbreviates @tc[CHARACTER], as in @tc[CHAR?],
  107. and @tc[ELT] abbreviates @tc[ELEMENT], as in @tc[STRING-ELT].
  108.  
  109. }
  110.  
  111. @dc{ Talk about hyphenation: hack-frob vs. frob-hack.  Input type vs.
  112. output type.  inputtype-operation-outputtype.
  113. Why @tc[COPY-LIST] vs. @tc[LIST-COPY]?  What about
  114. @tc[FILE-NEWER?] and @tc[MAYBE-OPEN]? }
  115.  
  116. @dc{
  117. The most common rule for formation of names for standard @Tau[]
  118. operations is that hyphenated names are often formed according to
  119. the formula
  120.   @begin[ProgramExample]
  121. @i[input type]-@i[verb]-@i[output type]
  122.   @end[ProgramExample]
  123. where either @i[input type] or @i[output type] may be ommitted where
  124. obvious or meaningless.  For example, @tc[STRING-LENGTH] names a
  125. procedure whose input type (that is, the expected type of its argument)
  126. is @i[string], whose verb @dc< ?? > is @i[length], and whose output type (type
  127. of the object returned) is @i[integer].  The name in expanded form
  128. would be @tc[STRING-LENGTH-INTEGER], but it is supposed to be obvious
  129. that the length of a string is an integer, so that part of the name
  130. is omitted.  Similarly, @tc[MAKE-VECTOR] abbreviates
  131. @tc[INTEGER-MAKE-VECTOR].  In many cases, both input and output type
  132. are omitted, e.g. @tc[APPEND] instead of @tc[LIST-APPEND-LIST].
  133. }
  134.  
  135. Below are listed some of the naming conventions used for standard @tau[]
  136. procedures, variables, and reserved words.
  137.  
  138. @begin[Description]
  139.  
  140. @tc[...?]@\The suffix @tc[?] indicates a predicate.  For example,
  141. @tc[ZERO?] is a predicate which returns true if its argument is
  142. numerically equal to zero.
  143.  
  144. @tc[...!]@\The suffix @tc[!] indicates a side-effecting variant of a
  145. non-side-effecting procedure.  For example, @tc[REVERSE!] is the same as
  146. @tc[REVERSE], but it alters its argument, recycling the storage to
  147. form its result.
  148.  
  149. @tc[...->...]@\Infix @tc[->] is used in names of @i[coercion procedures],
  150. which are routines which perform conversions
  151. between objects of different types.  For example, given a string,
  152. @tc[STRING->LIST] forms a list of the characters in the string.
  153.  
  154. @tc[*...*]@\The names of variables whose scope is not visually apparent
  155. to someone reading the program is usually bounded on either side with
  156. @tc[*]'s.  This convention is used for variables which are
  157. either not bound to procedures, or whose value is intended to change.
  158.  
  159. @tc[DEFINE-...]@\Relates to the assignment of something in a permanent
  160. way.  @tc[DEFINE] is typically used for defining procedures,
  161. @tc[DEFINE-OPERATION] to define generic operations, and so forth.
  162.  
  163. @tc[MAKE-...]@\Indicates a routine which creates an object of some type,
  164. given size (and sometimes datatype) information.  For example,
  165. @tc[(MAKE-STRING 5)] makes a string of length 5.
  166.  
  167. @tc[NOT-...]@\The prefix @qu"@tc[NOT-]" means that the truth value of some
  168. predicate is complemented.  For example, @wt[(NOT-LESS? @i[x] @i[y])]
  169. is the same as @wt[(NOT (LESS? @i[x] @i[y]))].
  170.  
  171. @tc[...CDR]@\Relates to the subtail or successive subtails of a list.
  172. For example, while the procedure named @tc[NTH] returns the n@+(th)
  173. @i[element] of a list, there is another procedure named @tc[NTHCDR] that
  174. returns the n@+(th) @i[subtail].
  175.  
  176. @tc[...Q]@\The presence of the trailing character @qu"@tc[Q]" on a name
  177. typically means that the predicate @qu"@tc[EQ?]" is involved.  For
  178. example,
  179. @begin[ProgramExample]
  180. @tc[(MEMQ? @i[x] @i[l])  @ce[]  (MEM? EQ? @i[x] @i[l])]
  181. @end[ProgramExample]
  182.  
  183. @end[description]
  184.  
  185. @section[Language principles and conventions]
  186.  
  187. @dc{ If this section can't be made to work, flush it. }
  188.  
  189. The design of @Tau[] employs a number of conventions.
  190. These conventions make the language more regular, predictable, and
  191. easy to learn.
  192.  
  193. @i[Anonymity:] objects are not tightly coupled to their names.
  194. @dc{ How to explain this essential principle.  Procedures, operations,
  195. types, structure types, ... }
  196.  
  197. @i[Locality:] effects may be achieved locally.
  198. @dc{ Another painfully basic idea, impossible to articulate. }
  199.  
  200. @i[Argument order:] procedures which extract components from aggregate
  201. objects generally take the aggregate object as the first argument, and
  202. selection information (if any) as subsequent arguments.
  203. Similarly, assignment procedures take the aggregate object or location
  204. specification early, and the value to be stored last.
  205.  
  206. @i[Indexing:] where numeric indices are involved, the indices begin with
  207. zero and range up to a given limit.  Ranges are specified as
  208. @i[half-open intervals], inclusive at the low end and exclusive at the
  209. high end.
  210.